﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sy3_4
{
    // 基类：Vehicle（车辆类）
    class Vehicle
    {
        protected int wheels;      // 车轮数
        protected float weight;    // 车重

        // 基类的 SetVehicle 方法（无参，此处为演示重载，实际可根据需求调整）
        public virtual void SetVehicle() { }

        // 基类的 GetVehicle 方法（用于输出信息）
        public virtual void GetVehicle() { }
    }

    // 派生类：Truck（卡车类，继承自 Vehicle）
    class Truck : Vehicle
    {
        private float maxLoad;     // 最大载重量
        private float oilPerKm;    // 每公里耗油量

        // 重载的 SetVehicle 方法（参数不同，实现重载）
        public void SetVehicle(int wheels, float weight, float maxLoad, float oilPerKm)
        {
            this.wheels = wheels;
            this.weight = weight;
            this.maxLoad = maxLoad;
            this.oilPerKm = oilPerKm;
        }

        // 判断是否超重的方法
        public bool Overload(float nowLoad)
        {
            return nowLoad > maxLoad;
        }

        // 计算总耗油量的方法
        public float OilConsumption(float runKm)
        {
            return runKm * oilPerKm;
        }

        // 重写基类的 GetVehicle 方法（使用 new 关键字实现重写）
        public new void GetVehicle()
        {
            MessageBox
.Show($"车轮数：{wheels}\n车重：{weight}\n载重量：{maxLoad}\n每公里耗油：{oilPerKm}");
        }
    }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 从TextBox中读取输入并转换为对应类型
            int wheels = int.Parse(textBox1.Text);
            float weight = float.Parse(textBox2.Text);
            float maxLoad = float.Parse(textBox3.Text);
            float oilPerKm = float.Parse(textBox4.Text);
            float runKm = float.Parse(textBox5.Text);
            float nowLoad = float.Parse(textBox6.Text);

            // 创建Truck对象并初始化
            Truck t = new Truck();
            t
.SetVehicle(wheels, weight, maxLoad, oilPerKm);

            // 判断是否超重并输出结果
            if (t.Overload(nowLoad))
            {
                MessageBox
.Show("对不起！卡车已超重，请卸下一些货物。");
                textBox6
.Focus(); // 聚焦到现载量输入框
            }
            else
            {
                float totalOil = t.OilConsumption(runKm);
                MessageBox
.Show($"卡车正在行驶中...\n现已耗油 {totalOil} 升！");
                t
.GetVehicle(); // 调用重写的信息输出方法
            }
        }
    }
}
